#include "Vehicle.h"
#include "VehicleFactory.h"

using namespace std;

/**
 * 抽象工厂：
 * 1.多个抽象产品类,可以派生多个具体产品类
 * 2.一个抽象工厂类,可以派生多个具体工厂类
 * 3.每个具体工厂可以创建多种具体产品
 * 4.抽象工厂是复杂化的工厂方法模式，可以创建产品簇(多种相关联的产品)
 * 5.当抽象工厂只创建一种产品时，就退化成了工厂方法模式
 * 适用场景：
 * 1.有多个工厂
 * 2.每个工厂创建多种产品
 **/

int main()
{
    Tracer::getInstance().setLevel(TRACE_LEVEL_DBG);
	Tracer::getInstance().addSink(std::make_shared<STDSink>()).start();

    auto& tesla = TeslaFactory::getInstance();
    tesla.createCar()->run();
    tesla.createPlane()->fly();

    auto& apple = AppleFactory::getInstance();
    apple.createCar()->run();
    apple.createPlane()->fly();

    return RC_OK;
}